const { resolve } = require("path");
const Timestamp = new Date().getTime();
// const CompressionWebpackPlugin = require("compression-webpack-plugin");
module.exports = {
  // 基本路径
  // publicPath: './', // 默认的'/'是绝对路径，如果不确定在根路径，改成相对路径'./'部署应用包时的基本 URL
  outputDir: "dist", // 输出文件目录
  assetsDir: "static", //放置生成的静态资源 (js、css、img、fonts) 的目录。
  indexPath: "index.html", // 指定生成的 index.html 的输出路径 (相对于 outputDir)。也可以是一个绝对路径。
  lintOnSave: false, // eslint-loader 是否在保存的时候检查
  productionSourceMap: false, // 生产环境是否生成 sourceMap 文件 设置为 false 以加速生产环境构建。
  filenameHashing: true, //文件名哈希。
  css: {
    // css相关配置
    extract: false, // 生产环境下是 true，开发环境下是 false
    sourceMap: false, // 开启 CSS source maps?
  },
  configureWebpack: {
    devtool: ["pre", "development"].includes(process.env.NODE_ENV) ? "cheap-module-eval-source-map" : false,
    output: {
      // 输出重构  打包编译后的 文件名称  【模块名称.版本号.时间戳】
      filename: `[name].${Timestamp}.js`,
      chunkFilename: `[name].${Timestamp}.js`,
    },
    optimization: {
      runtimeChunk: "single",
      splitChunks: {
        chunks: "all",
        maxInitialRequests: Infinity,
        minSize: 20000,
        cacheGroups: {
          vendor: {
            test: /[\\/]node_modules[\\/]/,
            name(module) {
              // get the name. E.g. node_modules/packageName/not/this/part.js
              // or node_modules/packageName
              // const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
              // npm package names are URL-safe, but some servers don't like @ symbols
              const rad = Math.random();
              return `common-${rad}`;
            },
          },
        },
      },
    },
    // plugins: [
    //   new CompressionWebpackPlugin({
    //     filename: '[path].gz[query]',
    //     algorithm: 'gzip',
    //     test: /\.(js)$/,
    //     threshold: 10240,
    //     // deleteOriginalAssets: true,
    //   }),
    // ],
  },
  // productionSourceMap: false, // 设为false，既可以减少包大小，也可以加密源码
  // transpileDependencies: ["element-ui"], //指定某个库在打包的时候需要编译
  // chainWebpack(config) {
  //   config.plugins.delete("prefetch"); //默认开启prefetch(预先加载模块)，提前获取用户未来可能会访问的内容 在首屏会把这十几个路由文件，都一口气下载了 所以我们要关闭这个功能模块
  //   // 对超过10kb的文件gzip压缩
  //   config.plugin("compressionPlugin").use(
  //     new CompressionWebpackPlugin({
  //       test: /\.(js|css|html)$/, // 匹配文件名
  //       threshold: 10240,
  //     })
  //   );
  // },
  pluginOptions: {
    "style-resources-loader": {
      preProcessor: "less",
      patterns: [
        // 全局变量路径
        resolve(__dirname, "./src/assets/less/global.less"),
      ],
    },
  },
};
